﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Win32;

namespace LCL
{
    /// <summary>
    /// 读写注册表操作类
    /// <example>
    /// //在HKEY_LOCAL_MACHINE\Software\MySoftware下面创建KeyName这个键
    /// RegisterOperate.SetRegEditData("KeyName","KeyValue")
    /// //修改HKEY_LOCAL_MACHINE\Software\MySoftware下面KeyName这个键的键值
    /// RegisterOperate.ModifyRegEditData("KeyName","KeyValue")
    /// //判断HKEY_LOCAL_MACHINE\Software\MySoftware下面KeyName这个键是否存在
    /// RegisterOperate.IsExist("KeyName")
    /// </example>
    /// </summary>
    public class RegisterUtility
    {
        /**/
        /// <summary>
        /// 写入注册表
        /// </summary>
        /// <param name="strName"></param>
        public static void SetRegEditData(string strName, string strValue)
        {
            try
            {
                RegistryKey hklm = Registry.LocalMachine;
                RegistryKey software = hklm.OpenSubKey("SOFTWARE", true);
                RegistryKey aimdir = software.CreateSubKey("MySoftware");
                aimdir.SetValue(strName, strValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        /**/
        /// <summary>
        /// 修改注册表项
        /// </summary>
        /// <param name="strName"></param>
        /// <param name="strValue"></param>
        public static void ModifyRegEditData(string strName, string strValue)
        {
            try
            {
                RegistryKey hklm = Registry.LocalMachine;
                RegistryKey software = hklm.OpenSubKey("SOFTWARE\\MySoftware", true);
                software.SetValue(strName, strValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        /**/
        /// <summary>
        /// 判断指定注册表项是否存在
        /// </summary>
        /// <param name="strName"></param>
        /// <returns></returns>
        public static bool IsExist(string strName)
        {
            try
            {
                bool exit = false;
                string[] subkeyNames;
                RegistryKey hkml = Registry.LocalMachine;
                RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);
                RegistryKey aimdir = software.OpenSubKey("MySoftware", true);
                subkeyNames = aimdir.GetValueNames();
                foreach (string keyName in subkeyNames)
                {
                    if (keyName == strName)
                    {
                        exit = true;
                        return exit;
                    }
                }
                return exit;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
        }
    }
}
